/*
 * #%L
 * BroadleafCommerce Profile
 * %%
 * Copyright (C) 2009 - 2016 Broadleaf Commerce
 * %%
 * Licensed under the Broadleaf Fair Use License Agreement, Version 1.0
 * (the "Fair Use License" located  at http://license.broadleafcommerce.org/fair_use_license-1.0.txt)
 * unless the restrictions on use therein are violated and require payment to Broadleaf in which case
 * the Broadleaf End User License Agreement (EULA), Version 1.1
 * (the "Commercial License" located at http://license.broadleafcommerce.org/commercial_license-1.1.txt)
 * shall apply.
 * 
 * Alternatively, the Commercial License may be replaced with a mutually agreed upon license (the "Custom License")
 * between you and Broadleaf Commerce. You may not use this file except in compliance with the applicable license.
 * #L%
 */
package org.broadleafcommerce.profile.core.service;

import org.broadleafcommerce.profile.core.domain.Customer;
import org.broadleafcommerce.profile.core.domain.CustomerPayment;

import java.util.List;

public interface CustomerPaymentService {

    CustomerPayment saveCustomerPayment(CustomerPayment customerPayment);

    List<CustomerPayment> readCustomerPaymentsByCustomerId(Long customerId);

    CustomerPayment readCustomerPaymentById(Long customerPaymentId);

    CustomerPayment readCustomerPaymentByToken(String token);

    void deleteCustomerPaymentById(Long customerPaymentId);

    void deleteCustomerPaymentByToken(String token);

    CustomerPayment create();

    CustomerPayment findDefaultPaymentForCustomer(Customer customer);

    CustomerPayment setAsDefaultPayment(CustomerPayment payment);

    void clearDefaultPaymentStatus(Customer customer);

    Customer deleteCustomerPaymentFromCustomer(Customer customer, CustomerPayment payment);

}
